Django 教程 11:部署 Django 到生产环境

您所在的位置:网站首页 django 连接数据库包括 Django 教程 11:部署 Django 到生产环境

Django 教程 11:部署 Django 到生产环境

2024-07-10 21:41| 来源: 网络整理| 查看: 265

本节介绍了你需要对 LocalLibrary 应用程序进行的更改,以使其在 Heroku 上运行。虽然 Heroku 的在 Heroku 使用 Django 入门教程,假设你将使用 Heroku 客户端,来运行你的本地开发环境,但我们的更改,与现有的 Django 开发服务器,以及我们已经学习的工作方式兼容。

Procfile

在 GitHub 储存库的根目录中,创建文件Procfile(无扩展名),以声明应用程序的进程类型和入口点。将以下文本复制到其中:

web: gunicorn locallibrary.wsgi --log-file -

“web:”告诉 Heroku,这是一个 web dyno,可以发送 HTTP 流量。在这个 dyno 中启动的进程,是 gunicorn,这是 Heruko 推荐的一种流行的 Web 应用程序服务器。我们使用模块 locallibrary.wsgi(使用我们的应用程序框架创建:/locallibrary/wsgi.py )中的配置信息启动 Gunicorn。

Gunicorn

Gunicorn 是推荐的 HTTP 服务器,用于 Heroku 上的 Django(如上面的 Procfile 中所述)。它是一个用于 WSGI 应用程序的纯 Python HTTP 服务器,可以在一个 dyno 中,运行多个 Python 并发进程(有关更多信息,请参阅使用 Gunicorn 部署 Python 应用程序)。

虽然在开发期间,我们不需要 Gunicorn 为我们的 LocalLibrary 应用程序提供服务,但我们将安装它,以便它成为我们在远程服务器上设置 Heroku 的 requirements 的一部分。

使用 pip(我们在设置开发环境时安装)在命令行上,将 Gunicorn 安装到本地:

bashpip3 install gunicorn 数据库配置

我们不能在 Heroku 上使用默认的 SQLite 数据库,因为它是基于文件的,并且每次应用程序重新启动时,都会从暂时的文件系统中删除它(通常每天一次,每次应用程序或其配置变量被更改时)。

处理这种情况的 Heroku 机制,是使用数据库加载项,并使用来自加载项设置的环境配置变量的信息,来配置 Web 应用程序。有很多数据库选项,但我们将使用 Heroku postgres 数据库的爱好者等级,因为它是免费的,被 Django 所支持,并在使用免费的爱好者 dyno 计划等级时,会自动添加到新的 Heroku 应用程序。

使用名为DATABASE_URL的配置变量,将数据库连接信息提供给 Web dyno。Heroku 建议开发人员使用 dj-database-url 套件包,以解析DATABASE_URL环境变量,并自动将其转换为 Django 所需的配置格式,而不是将此信息硬编码到 Django 中。除了安装 dj-database-url 套件包之外,我们还需要安装psycopg2,因为 Django 需要它与 Postgres 数据库进行交互。

dj-database-url (Django database configuration from environment variable)

在本地安装 dj-database-url,使其成为我们在远程服务器上设置 Heroku 的 requirements 的一部分:

bashpip3 install dj-database-url settings.py

打开 /locallibrary/settings.py,并将以下配置复制到文件的底部:

python# Heroku: Update database configuration from $DATABASE_URL. import dj_database_url db_from_env = dj_database_url.config(conn_max_age=500) DATABASES['default'].update(db_from_env)

备注:

我们仍然会在开发期间使用 SQLite,因为我们的开发计算机上不会设置DATABASE_URL环境变量。 conn_max_age=500的值使连接持久,这比在每个请求周期重新创建连接更有效。但是,这是可选的,如果需要可以删除。 psycopg2 (Python Postgres database support)

Django 需要 psycopg2 来处理 Postgres 数据库,你需要将它添加到requirements.txt 中,以便 Heroku 在远程服务器上进行设置(如下面的 requirements 部分所述)。

Django 默认会在本地使用我们的 SQLite 数据库,因为我们的本地环境中,没有设置DATABASE_URL环境变量。如果你想完全切换到 Postgres,并使用我们的 Heroku 免费等级数据库,进行开发和生产,那么你可以这么做。例如,要在基于 Linux 的系统上,本地安装 psycopg2 及其依赖项,你将使用以下 bash / terminal 命令:

bashsudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib pip3 install psycopg2

有关其他平台的安装说明,请访问 psycopg2 网站。

但是,你不需要这样做 - 你不需要在本地计算机上激活 PostGreSQL,只要将其作为要求(requirement)提供给 Heroku,请参阅requirements.txt(见下文)。

在生产环境中提供静态文件

在开发过程中,我们使用 Django 和 Django 开发 Web 服务器,来提供静态文件(CSS,JavaScript 等)。在生产环境中,我们通常提供来自内容传送网络(CDN)或 Web 服务器的静态文件。

备注: 通过 Django/web 应用程序提供静态文件是低效的,因为请求必须通过不必要的附加代码(Django),而不是由 Web 服务器或完全独立的 CDN 直接处理。虽然这对于开发期间的本地使用无关紧要,但如果我们在生产环境中使用相同的方法,则会对性能产生重大影响。

为了便于将静态文件与 Django Web 应用程序分开托管,Django 提供了 collectstatic 工具,来收集这些文件以进行部署(有一个设置变量,用于定义在运行 collectstatic 时,应该收集文件的位置)。Django 模板是指相对于设置变量(STATIC_URL)的静态文件的托管位置,因此如果将静态文件移动到另一个主机/服务器,则可以更改此位置。

相关的设置变量是:

STATIC_URL: 这是将提供静态文件的基本 URL 位置,例如,在 CDN 上。这用于在我们的基本模板中访问的静态模板变量(请参阅 Django 教程 5:创建我们的主页)。 STATIC_ROOT: 这是 Django 的“collectstatic”工具将收集模板中引用的任何静态文件的目录的绝对路径。收集完成后,可以将这些文件,作为一个组上载到托管文件的任何位置。 STATICFILES_DIRS: 这列出了 Django 的 collectstatic 工具应该搜索静态文件的其他目录。 settings.py

打开 /locallibrary/settings.py,并将以下配置,复制到文件的底部。 BASE_DIR 应该已经在你的文件中定义了(STATIC_URL可能已经在文件创建时已经定义。虽然它不会造成任何伤害,但你也可以删除重复的先前引用)。

python# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.0/howto/static-files/ # The absolute path to the directory where collectstatic will collect static files for deployment. STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # The URL to use when referring to static files (where they will be served from) STATIC_URL = '/static/'

我们实际上,将使用名为 WhiteNoise 的库来提供文件,我们将在下一节中安装和配置。

有关更多信息,请参阅 Django 和静态资产(Heroku 文档)。

Whitenoise

有许多方法可以在生产环境中提供静态文件(我们在前面的部分中看到了相关的 Django 设置)。Heroku 建议在生产环境中使用 WhiteNoise 项目,直接从 Gunicorn 提供静态资产。

备注: Heroku 会在上传你的应用程序后,自动调用 collectstatic 并准备静态文件,以供 WhiteNoise 使用。查看 WhiteNoise 文档,了解其工作原理以及实现,为什么是提供这些文件的相对有效方法。

设置 WhiteNoise 以便在项目中使用的步骤如下:

安装 WhiteNoise

使用以下命令在本地安装 whitenoise:

bashpip3 install whitenoise settings.py

要将 WhiteNoise 安装到你的 Django 应用程序中,请打开 /locallibrary/settings.py,找到MIDDLEWARE设置,并在SecurityMiddleware正下方的列表顶部附近,添加WhiteNoiseMiddleware:

pythonMIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]

这是可选的,你可以在提供静态文件时,减小它们的大小(这样更有效)。只需将以下内容添加到 /locallibrary/settings.py 的底部:

python# Simplified static file serving. # https://warehouse.python.org/project/whitenoise/ STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' Requirements

Web 应用程序的 Python requirements,必须放在储存库根目录中的文件 requirements.txt 中。然后 Heroku 将在重建你的环境时,自动安装它们。你可以在命令行上,使用 pip 创建此文件(在 repo 根目录中,运行以下命令):

bashpip3 freeze > requirements.txt

安装上面所有不同的依赖项后,你的 requirements.txt 文件,应至少列出这些项目(尽管版本号可能不同)。请删除下面未列出的任何其他依赖项,除非你已为此应用程序明确添加它们。

dj-database-url==0.4.1 Django==2.0 gunicorn==19.6.0 psycopg2==2.6.2 whitenoise==3.2.2

备注: 确保存在类似上面的 psycopg2 的那一行!即使你没有在本地安装它,你仍然应该将它添加到requirements.txt。

Runtime

runtime.txt 文件(如果已定义)告诉 Heroku 使用哪种编程语言。在 repo 的根目录中,创建文件并添加以下文本:

python-3.6.4

备注: Heroku 只支持少量的 Python 运行库(在编写本文时,包括上面的那个)。Heroku 将使用受支持的运行库,而不管此文件中指定的值。

将更改保存到 Github 并重新测试

接下来,我们将所有更改保存到 Github。在终端(我们的存储库中的 whist)中,输入以下命令:

pythongit add -A git commit -m "Added files and changes required for deployment to heroku" git push origin master

在我们继续之前,让我们在本地,再次测试网站,并确保它不受上述任何更改的影响。像往常一样运行开发 Web 服务器,然后检查站点,是否仍然按预期在浏览器上运行。

bashpython3 manage.py runserver

我们现在应该准备开始在 Heroku 上部署 LocalLibrary。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3